import java.util.*;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: lenovo
 * Date: 2022-09-12
 * Time: 23:14
 */
public class MapandSet {

    static  class Player implements Comparable<Player>{//map是<k,v>模型,由于treemap实现了SortMap接口,
        // 所以treemap里的元素必须能够比较大小
        String name;

        @Override
        public String toString() {
            return "Player{" +
                    "name='" + name + '\'' +
                    '}';
        }

        public Player(String name) {
            this.name = name;
        }

        @Override
        public int compareTo(Player o) {
            return 0;
        }
    }

    public static void main2(String[] args) {
        Player player = new Player("郭艾伦");
        Map<Player,Integer> map = new TreeMap<>();
        map.put(player,13);
        System.out.println(map);
    }


    public static void main4(String[] args) {
        //随机产生10_0000个数字
        int[] array = new int[10_0000];
        Random random = new Random();
        for(int i= 0; i< array.length; i++){
            array[i] = random.nextInt(50_000);
        }
//        fun1(array);
//        System.out.println(fun2(array));
        fun3(array);

    }



    //将这10_0000个重复的数据去掉
    public static void fun1(int[] array){
        //将这10_0000个数据去重
        Set<Integer> set0 = new HashSet<>();
        for (int i = 0; i < array.length; i++){
            set0.add(array[i]);
        }
        System.out.println(set0);
    }
    private static int fun2(int[] array) {
        //找出10_0000个数据里,第一个重复的数据
        Set<Integer> set = new HashSet<>();
        int i = 0;
        for (; i < array.length; i++) {
            if( !set.contains(array[i])){//不包含array[i]就往里方array[i]
                set.add(array[i]);
            }
            //包含break
           break;
        }
        //返回第一次重复的元素
        return array[i];
    }
    //统计10_0000个数据里每个数据出现的次数
    private static void fun3(int[] array) {
        Map<Integer,Integer> map = new HashMap<>();
        for (int i = 0; i < array.length; i++) {
            //循环遍历array数组
            int key = array[i];
          if(map.get(key) == null){//map里不存在key
              //往map里存放key,因为是第一次放进去,所以value的值等于1
              map.put(key,1);
          }else {//map里面已经存在了key值
              int value = map.get(array[i]);//获得array的value值
              map.put(key,value+1);
          }
        }
        System.out.println(map);

    }
    public static void main(String[] args) {
        //set是key模型里面不重复存储一样的key,因此set最大好处就是可以用来去重
        Set<String> set = new TreeSet<>();//底层是treemap
        set.add("asd");
        set.add("asd");
        set.add("asd");
        set.add("asd");
        set.add("asd");
        System.out.println(set);
        Set<String> set1 = new HashSet<>();//底层是hashmap
    }
    public static void main0(String[] args) {
        Map<String,Integer> map = new TreeMap<>();//treemap 底层是一颗红黑树
        map.put("库里",30);
        map.put("汤普森",11);
        map.put("维金斯",22);
        map.put("小库里",30);
        int  c = map.put("维金斯",24);//key值是唯一的,后添加的key会将已存在的key给覆盖
        System.out.println(c);//如果key已经存在,新的value会将旧的value覆盖并且返回旧的value
        //map.put(null,null);//不能添加null值,因为null值无法比较
        System.out.println(map);//因为实现了SortMap接口,因此会根据key的值来排序
        System.out.println(map.size());
//        System.out.println(map.get("库里"));//get(key)可以获取到key对应的value值
//        System.out.println(map.getOrDefault("邓辉",100));//返回默认值,如果key不存在,返回defaultValue
//        map.remove("维金斯");
//        System.out.println(map);
//        Set<String> set =  map.keySet();//set key是不重复的
//        System.out.println(set);
//        Collection<Integer> list =  map.values();//collection value值是可以重复的
//        System.out.println(list);
        Set<Map.Entry<String,Integer>> entrySet = map.entrySet();
        //System.out.println(entrySet);
        for(Map.Entry<String,Integer> entry:entrySet){
            System.out.println("key:"+entry.getKey()+" "+"value:"+entry.getValue());
        }
    }
}
